package util.android.form.respuesta;

import java.util.HashMap;
import java.util.Map;

import com.androidutil.R;

import util.android.ViewUtil;
import util.android.form.LinearLayoutContenedor;
import util.form.respuesta.Input;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;

public class EditTextInputGroup {
		
	private final Map<String,EditTextInput> inputsEditText = new HashMap<String, EditTextInput>();
	private final Input input;
		
	public static class Params 
	extends EditTextInput.Params
	{				
		//Parametros para el EditText
		public TipoOtro tipoOtro;		
		public EditText etOtro;		
		//public OnGuardar1Listener onGuardarInput1Listener;
		
		
	}	
			
	public static enum TipoOtro {
		EDIT_TEXT,
		DIALOG;
	}

	public EditTextInputGroup(Input input) {
		this.input = input;
	}

	public EditTextInput getEditTextInput(String key) {
		return inputsEditText.get(key);
	}
	
	public final void setRelevanciaInputOtro(boolean relevancia) {
		for(EditTextInput in : inputsEditText.values()) {
			in.setRelevancia(relevancia);
		}
	}
	
	public final void setRelevanciaInputOtro(String key, boolean relevancia) {
		EditTextInput in = inputsEditText.get(key);
		if(in!=null) {
			in.setRelevancia(relevancia);
			if(relevancia)
				in.requestFocus();
		}
	}
	
	public void agregar(
			final ViewGroup viewGroup, 
			final String key, 
			final Params editTextParams, 
			EditTextInputCommand editTextCommand) throws Exception {
		
		if(editTextParams!=null) {
			
			EditTextInput etInput = null;
			
			//INPUT OTRO
			if(editTextParams.tipoOtro!=null || editTextParams.etOtro!=null) {
				if(editTextParams.tipoOtro==null)
					editTextParams.tipoOtro = TipoOtro.EDIT_TEXT;//otro por defecto				
				/*
				switch(p.tipoOtro) {
					case EDIT_TEXT:
					case DIALOG:
						
				}*/		
				
				if(editTextParams.etOtro==null) {
					//crearlo
					EditText etOtro = (EditText) View.inflate(viewGroup.getContext(), R.layout.edit_text_multi_line, null);		
					//rg.addView(etOtro);
					ViewUtil.addViewMatch_Wrap(viewGroup, etOtro);
					editTextParams.etOtro = etOtro;
				}
				
				//Reemplazandolo por un EditText con scroll horizontal
				ViewGroup parent = (ViewGroup) editTextParams.etOtro.getParent();		
				ViewGroup.LayoutParams pEditText = editTextParams.etOtro.getLayoutParams();
				LinearLayout.LayoutParams pScroll = new LinearLayout.LayoutParams(pEditText.width,pEditText.height);
				parent.removeView(editTextParams.etOtro);	
				
				HorizontalScrollView hsv =  (HorizontalScrollView) View.inflate(parent.getContext(), R.layout.edit_text_horizontal_scroll, null);
				editTextParams.etOtro = (EditText) hsv.findViewWithTag("edit_text");		
				parent.addView(hsv,pScroll);//con los mismos parametros que tenia EditText		
				//fin del reemplazo
				
				final String especifique = "(Especifique)";
				editTextParams.etOtro.setHint(especifique);		
				
				final EditTextInput inputOtro = new EditTextInput(editTextParams.etOtro);		
				inputOtro.setContenedor(inputOtro);
				//inputOtro.setRequerido(true);
								
				editTextParams.etiqueta = especifique;								
				etInput = inputOtro;
			}			
			//INPUT VALOR
			else /*if(p.tipo!=null)*/ {
				///VISTA///
				LinearLayoutContenedor ly = new LinearLayoutContenedor(viewGroup.getContext());
				//ly.setOrientation(LinearLayout.VERTICAL);
				
				EditText et = (EditText) View.inflate(viewGroup.getContext(), R.layout.edit_text, null);
				
				if(editTextParams.etiqueta!=null) {
					/*
					TextView tv = (TextView) View.inflate(viewGroup.getContext(), R.layout.text_view, null);
					tv.setText(p.etiqueta);
					ly.addView(tv);
					*/
					et.setHint(editTextParams.etiqueta);
				}
										
				ly.addView(et);
				//viewGroup.addView(ly);
				ViewUtil.addViewMatch_Wrap(viewGroup, ly);				
				////
				
				EditTextInput inputValor = new EditTextInput(et);		
				inputValor.setContenedor(ly);

				//inputValor.setTipo(p.tipo);				
				
				etInput = inputValor;
			}
			
			if(etInput!=null) {
				etInput.setRelevancia(false);//relevancia inicial
				//etInput.setOnGuardarListener(p.onGuardarInput1Listener);
				if(editTextParams.valor!=null)
					etInput.setValor(editTextParams.valor);
				
				
				
				//etInput.setPreguntarOmision(p.preguntarOmision);
				etInput.setMissing(Input.MISSING_5);
				//etInput.setTituloPreguntaOmision("Desea omitir '"+editTextParams.etiqueta+"'");
				
				etInput.setRequerido(true);
				etInput.setEtiquetaCorta(input.getPregunta().getEtiquetaCorta()+"-"+key+" "+editTextParams.etiqueta);
				
				/*
				final EditTextInput etInputFinal = etInput;
				Friend.editTextInputGroup(etInput,new Restriccion1() {					
					@Override
					public String validar(String valor) throws Exception {
						if(etInputFinal.isRequerido()) {
							if(valor==null || valor.trim().isEmpty()) {
								if(editTextParams.nombre==null)
									return input.getEtiquetaCorta()+": "+editTextParams.etiqueta;
								return editTextParams.etiqueta;
							}
						}
						return null;
					}
				});
				*/
				
				if(editTextCommand!=null)
					editTextCommand.execute(etInput);
				
				etInput.setNombre(editTextParams.nombre);
				
				inputsEditText.put(key, etInput);
				input.getSubInputs().agregar(etInput);				
			}
		}
	}
	
	public void agregarOtro(ViewGroup viewGroup, String key, EditTextInputCommand comando) throws Exception {
		Params p = new Params();
		p.tipoOtro = TipoOtro.EDIT_TEXT;
		agregar(viewGroup,key,p,comando);
	}

	/*
	public void agregarOtro(ViewGroup viewGroup, String key, String valorInicial, String columnaOtro) {
		Params p = new Params();
		p.tipoOtro = TipoOtro.EDIT_TEXT;
		p.nombre = columnaOtro;
		p.valor = valorInicial;
		agregar(key,viewGroup,p);
	}
	
	public void agregarOtro(ViewGroup viewGroup, String key, String valorInicial, OnGuardar1Listener onGuardarInput1Listener) {
		Params p = new Params();
		p.tipoOtro = TipoOtro.EDIT_TEXT;
		p.onGuardarInput1Listener = onGuardarInput1Listener;
		p.valor = valorInicial;
		agregar(key,viewGroup,p);
	}
	*/
}
